package ar.com.mercadolibre.oportunidades.tareas;

import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.util.Log;
import ar.com.mercadolibre.oportunidades.Resultados;
import ar.com.mercadolibre.oportunidades.entidades.Resultado;

public class TareaBusqueda extends AsyncTask<Void, Void, List<Resultado>> {

	private static final String LOG_TAG = TareaBusqueda.class.getSimpleName();

	private String query;
	private Resultados actividad;

	public TareaBusqueda(Resultados actividad, String query) {

		this.actividad = actividad;
		this.query = query;
	}

	@Override
	protected List<Resultado> doInBackground(Void... params) {

		String response = "";
		HttpClient httpClient = new DefaultHttpClient();
		HttpGet httppost = new HttpGet("https://api.mercadolibre.com/sites/MLA/search?" + this.query.replace(" ", "%20"));

		try {

			HttpResponse httpResponse = httpClient.execute(httppost);
			response = EntityUtils.toString(httpResponse.getEntity());

		} catch (Exception e) {
			Log.e(LOG_TAG, "Error con la API al descargar resultados", e);
		}

		List<Resultado> resultados = new ArrayList<Resultado>();
		
		if (response.isEmpty()) {
			return resultados;
		}
		
		
		try {

			JSONObject jsonParseado = new JSONObject(response);
			JSONArray resultadosJSON = jsonParseado.getJSONArray("results");


			for (int i = 0; i < resultadosJSON.length() ; i++) {

				JSONObject resultadoJSON = resultadosJSON.getJSONObject(i);

				Resultado resultado = new Resultado();
				resultado.setId(Long.valueOf(i));
				resultado.setTitulo( resultadoJSON.getString("title") );
				resultado.setPrecio( resultadoJSON.getString("price") );
				resultado.setThumbnail( descargarThumbnail(resultadoJSON.getString("thumbnail")) );
				resultado.setUrl( resultadoJSON.getString("permalink") );

				resultados.add(resultado);
			}

		} catch (Exception e) {

			Log.e(LOG_TAG, "Error parseando los resultados.", e);
		}

		return resultados;

	}

	private Drawable descargarThumbnail(String thumbnailUrl) {

		Drawable thumbnail = null;

		try {
			InputStream is = (InputStream) new URL(thumbnailUrl).getContent();
			thumbnail = Drawable.createFromStream(is,"src");
		} catch (Exception e) {
			Log.e( LOG_TAG ,"Error descargando el thumbnail del Resultado", e);
		}

		return thumbnail;
	}

	@Override
	protected void onPostExecute(List<Resultado> result) {

		super.onPostExecute(result);
		this.actividad.mostrarResultados(result);
	}

}
